<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 封装ajax(包含promise)
        function axios (options) {
            // 创建一个promise对象
            return new Promise((resolve,reject) => {
                // 1.创建一个xhr对象
                const xhr = new XMLHttpRequest()
                // 2.设置请求方式和地址
                xhr.open(options.method, options.url)
                // 3.设置请求体，发送请求
                xhr.send(null)

                // 4.监听结果，xhr有好几个状态，只有到4，才表示请求完全回来
                xhr.onreadystatechange = function() {
                    if(xhr.readyState === 4) {
                        // 只有到了4，请求完全回来了
                        if(xhr.status === 200) {
                            console.log('请求成功')
                            resolve(JSON.parse(xhr.responseText))
                        } else {
                            console.log('请求失败')
                            reject(new Error(xhr.responseText))
                        }
                    }
                }
            })
        }

        // 先请求了全部的数据，再请求了id为5的数据
        axios({
            method: 'get',
            url: 'http://localhost:3000/heroes'
        }).then(res => {
            console.log(res)
            console.log(111)

            return axios({
                method: 'get',
                url: 'http://localhost:3000/heroes/10011'
            })
        }).then(res => {
            console.log(res)
        })

        // promise 固然解决了回调函数的嵌套，但是使用起来链式的编写还是有一些麻烦
        // es6新出了两个关键字 async await，基于promise，优化了promise的使用方式(重心)

        // 将来使用promise的步骤
        // 1.创建promise对象(封装成一个函数)
        // 2.使用promise对象，通过async 和 await 使用
    </script>
</body>
</html>